// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_WEBSOCKETS_WEBSOCKET_MUX_H_
#define NET_WEBSOCKETS_WEBSOCKET_MUX_H_

namespace net {

// Reason codes used by the mux extension.
enum WebSocketMuxError {
    // Codes starting with 2000 apply to the physical connection. They are used
    // for dropping the control channel.
    kWebSocketMuxErrorPhysicalConnectionFailed = 2000,
    kWebSocketMuxErrorInvalidEncapsulatingMessage = 2001,
    kWebSocketMuxErrorChannelIdTruncated = 2002,
    kWebSocketMuxErrorEncapsulatedFrameIsTruncated = 2003,
    kWebSocketMuxErrorUnknownMuxOpcode = 2004,
    kWebSocketMuxErrorInvalidMuxControlBlock = 2005,
    kWebSocketMuxErrorChannelAlreadyExists = 2006,
    kWebSocketMuxErrorNewChannelSlotViolation = 2007,
    kWebSocketMuxErrorNewChannelSlotOverflow = 2008,
    kWebSocketMuxErrorBadRequest = 2009,
    kWebSocketMuxErrorUnknownRequestEncoding = 2010,
    kWebSocketMuxErrorBadResponse = 2011,
    kWebSocketMuxErrorUnknownResponseEncoding = 2012,

    // Codes starting with 3000 apply to the logical connection.
    kWebSocketMuxErrorLogicalChannelFailed = 3000,
    kWebSocketMuxErrorSendQuotaViolation = 3005,
    kWebSocketMuxErrorSendQuotaOverflow = 3006,
    kWebSocketMuxErrorIdleTimeout = 3007,
    kWebSocketMuxErrorDropChannelAck = 3008,
    kWebSocketMuxErrorBadFragmentation = 3009,
};

} // namespace net

#endif // NET_WEBSOCKETS_WEBSOCKET_MUX_H_
